/*
package d4_homework;

import java.io.*;

public class SecondQuestion {
    public static void main(String[] args) {
        //目标: 能够使用递归调用定义方法,剪切文件夹
        //剪切-->就是先删除再粘过去
        //源文件夹: D:\javadevelop\2024班\02阶段java基础进阶\小花朵
        //目标文件夹
        //1、创建扫描器
      */
/*  Scanner sc = new Scanner(System.in);
        //2、提示用户进行输出
        System.out.println("请输入要剪切的源文件夹");
        //接收要剪切的源文件夹
        String srcDirectory = sc.next();

        System.out.println("请输入您要剪切到目标文件夹");
        String destDirectory = sc.next();
*//*

        //调用方法完成剪切功能
        try {
            cutDirectory(new File("D:\\javadevelop\\2024班\\陈平安"), new File("D:\\javadevelop\\2024班\\陈某\\"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //1、独立功能独立成方法
    //完成剪切功能
    public static void cutDirectory(File srcDirectory, File destDirectory) throws Exception {
        //1.1进行极端判断

        //但要进行剪切的文件夹不存在,是null对象,都不进行剪切, 目的地文件夹如此是也不进行剪切
        if (srcDirectory == null || destDirectory == null || !srcDirectory.exists() || !destDirectory.exists()
            //                          盘一定要在,不再不让您剪切
        ) {
            //直接进行打回去 -->调用运行时异常进行处理
            throw new FourthQuestionRuntimeException("想清楚了才进行剪切, 会不会");
        }
        //1.2如果是文件就直接进行剪切
        if (srcDirectory.isFile()) {
            copyFileDirectory(srcDirectory, destDirectory);
            //然后删除该文件
            srcDirectory.delete();//注意不要乱用,不会进入回收站
            return;//-->直接干掉方法
        }
        //1.2如果文件夹-->创建源文件夹
        File newDirectory = new File(destDirectory, srcDirectory.getName());
        if (!newDirectory.exists()) {
            newDirectory.mkdirs();//可以创建创还能多机目录
        }
        */
/*
        if (srcDirectory.isDirectory()){
        }*//*



        //到这里证明是文件夹
        //1.3获取所有的文件夹下的一级文件对象
        File[] files = srcDirectory.listFiles();

        //1.4做极端判断
        if (files == null) {
            //没有权限进行操作
            //直接打回
            return;
        }
        //假如是一个空文件夹 --------->上面已经记性判断,并且创建,不需要管这个-->所以也是直接打回
        if (files.length == 0) {
            ///先复制在删除
            copyFileDirectory(srcDirectory, newDirectory);
            destDirectory.delete();
            return;
            //进行删除
        }

        //1.5遍历该文件夹下的所有一级文件对象
        for (File file : files) {
            //判断是文件还是文件夹
            if (file.isFile()) {
                copyFileDirectory(file, newDirectory);
                //并进行删除
                file.delete();
            }
            //是文件夹
            if (file.isDirectory()) {
                //进行递归-->删除文件夹的操作在上面
                cutDirectory(file, newDirectory);//file底层会帮您处理后面的/问题
            }
        }
//        destDirectory.delete();//删除最后一个


    }

    //2、进行文件的复制-->由于这节课值教了字节输入输出流,那么只用字节输入和输出流记性操作
    private static void copyFileDirectory(File srcDirectory, File destDirectory) throws Exception {

        //2.1创建字节输入流与目标文件接通
        InputStream fis = new FileInputStream(srcDirectory);

        //准备一个桶,用于按照桶进行读取
        byte[] buffer = new byte[1024 * 32];

        //2.2创建要复制到的目标文件, 一定要如此,不然就会报错
        File fileDir = new File(destDirectory, srcDirectory.getName());

        //2.3文件字节输出流与目标文件的管道
        OutputStream fos = new FileOutputStream(fileDir);

        //2.4循环进行拷贝
        int len; //记录读取到的字节个数 -->如果没有读取到就是-1
        while ((len = fis.read(buffer)) != -1) {
            //进行读多少倒多少
            fos.write(buffer, 0, len);
        }
        //2.5进行关闭流(一般都是倒过来关闭)
        fos.close();
        fis.close();
    }
}
*/
